package com.sh.data.engine.domain.shims.db.model;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.StringJoiner;

/**
 * @Author: zigui.zdf @Date: 2022/1/4 19:15:57 @Description:
 */
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder(toBuilder = true)
public class FieldInfoDomain {

    /**
     * 字段名
     */
    private String fieldName;

    /**
     * 字段类型（从db中读取到的）
     */
    private String fieldType;

    /**
     * 字段类型（对应的java.sql.Types的SQL类型）
     */
    private int dataType;

    /**
     * 字段长度
     */
    private Integer columnSize;

    /**
     * 字段小数位长度
     */
    private Integer decimalDigits;

    /**
     * 是否是分区字段
     */
    private Boolean isPartition;

    /**
     * 字段是否是主键
     */
    @Builder.Default
    private boolean isPk = false;

    /**
     * 字段可否为空
     */
    private boolean isNullable;

    /**
     * 是否是标签字段(InfluxDB使用)
     */
    private Boolean isTag;

    /**
     * 字段备注
     */
    private String comment;

    /*是否分区*/
    public Boolean isPartition() {
        return Boolean.TRUE.equals(this.getIsPartition());
    }

    public boolean isTag() {
        return Boolean.TRUE.equals(this.getIsTag());
    }

    @Override
    public String toString() {
        return new StringJoiner(", ", FieldInfoDomain.class.getSimpleName() + "[", "]")
            .add("fieldName='" + fieldName + "'")
            .add("fieldType='" + fieldType + "'")
            .add("dataType=" + dataType)
            .add("columnSize=" + columnSize)
            .add("decimalDigits=" + decimalDigits)
            .add("isPartition=" + isPartition)
            .add("isPk=" + isPk)
            .add("isNullable=" + isNullable)
            .add("isTag=" + isTag)
            .add("comment='" + comment + "'")
            .toString();
    }
}
